package cn.itcast.redis;

import java.util.ArrayList;
import java.util.List;

import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

/**
 * 分布式（分片）的连接池
 */
public class ShardedJedisPoolDemo {

    public static void main(String[] args) {
        // 构建连接池配置信息
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        // 设置最大连接数
        poolConfig.setMaxTotal(50);
        // 设置获取连接的最大等待时间
        poolConfig.setMaxWaitMillis(1000);
        // 开启获取连接时可用性校验，保证拿到的连接都是可用的
        poolConfig.setTestOnBorrow(true);

        // 定义分片信息,添加每个redis分片的IP和端口
        List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
        shards.add(new JedisShardInfo("127.0.0.1", 6379));
        shards.add(new JedisShardInfo("127.0.0.1", 6380));

        // 定义分片连接池，指定配置信息和分片地址信息
        ShardedJedisPool shardedJedisPool = new ShardedJedisPool(poolConfig, shards);
        ShardedJedis shardedJedis = null;
        try {
            // 从连接池中获取到jedis分片对象
            shardedJedis = shardedJedisPool.getResource();
            // 写入20个缓存数据
//            for(int i = 0; i < 20; i++){
//                shardedJedis.set("key_" + i, "value_"+i);
//            }
            System.out.println(shardedJedis.get("key_0"));
            System.out.println(shardedJedis.get("key_10"));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != shardedJedis) {
                // 关闭，检测连接是否有效，有效则重置后放回到连接池中，无效则销毁
                shardedJedis.close();
            }
        }
        // 关闭连接池（可选）
        shardedJedisPool.close();
    }
}
